基于C#车辆车牌识别源代码

购买注意事项.
1.无需注册登录,可购买前先与客服沟通,或付款成功后,联系客服获取源码。
2.购买的源码本站负责在客户电脑免费部署。
3.功能内源码如有bug,本站负责免费调试修改。
4.如需在源码基础上增加、修改、删减功能,本站收取变更服务费用,费用多少可与客户协商。
100元
点击购买
资料介绍

基于C#车辆车牌识别源代码,灰度均衡化、高斯滤波、sobel边缘检测、车牌定位、c灰度化、c二值化等对车牌号处理,最终提取车牌号,相应时间低于4秒。


车牌识别,车牌识别源码,毕业设计代做,毕设代做,计算机毕业设计代做,计算机毕设,毕业设计源码,代码讲解,代码调试,程序代做,程序代写,程序定制,论文代写,论文降重

int charBmpCount = this.TransformFiles(charSourceBath);

            int provinceBmpCount = this.TransformFiles(provinceSourceBath);

            int[] charMatch = new int[charBmpCount];//存储当前图片和资源库中图片比对后所得的像素不同的个数

            int[] provinceMatch = new int[provinceBmpCount];


            charFont = new Bitmap[charBmpCount];

            provinceFont = new Bitmap[provinceBmpCount];//这两个数组存储的是资源库中的bitmap文件

            //Console.WriteLine("一共有这么几个资源文件" + (charBmpCount + provinceBmpCount));

            for (int i = 0; i < charBmpCount; i++)

            {

                charMatch[i] = 0;

            }

            for (int i = 0; i < provinceBmpCount; i++)

            {

                provinceMatch[i] = 0;

            }

            for (int i = 0; i < charBmpCount; i++)

            {

                charFont[i] = (Bitmap)Bitmap.FromFile(charString[i], false);//使用该文件中的嵌入颜色管理信息,从指定的文件创建m_Bitmap

            }                                                               //charString存储的是路径

            for (int i = 0; i < provinceBmpCount; i++)

            {

                provinceFont[i] = (Bitmap)Bitmap.FromFile(provinceString[i], false);//使用该文件中的嵌入颜色管理信息,从指定的文件创建m_Bitmap

            }


            int matchIndex = 0;//最终匹配索引

            string[] digitalFont = new string[7];

            unsafe

            {

                if (z_Bitmaptwo[0] != null)

                {

                    BitmapData bmData = z_Bitmaptwo[0].LockBits(new Rectangle(0, 0, z_Bitmaptwo[0].Width, z_Bitmaptwo[0].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                    int stride = bmData.Stride;

                    System.IntPtr Scan = bmData.Scan0;

                    // byte* p = (byte*)(void*)Scan;

                    int nOffset = stride - z_Bitmaptwo[0].Width * 3;

                    int nWidth = z_Bitmaptwo[0].Width;

                    int nHeight = z_Bitmaptwo[0].Height;

                    int lv, lc = 30;


                    for (int i = 0; i < provinceBmpCount; i++)

                    {

                        byte* p = (byte*)(void*)Scan;

                        BitmapData bmData1 = provinceFont[i].LockBits(new Rectangle(0, 0, provinceFont[i].Width, provinceFont[i].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                        int stride1 = bmData1.Stride;

                        System.IntPtr Scan1 = bmData1.Scan0;

                        byte* p1 = (byte*)(void*)Scan1;

                        int nOffset1 = stride1 - provinceFont[i].Width * 3;

                        int nWidth1 = provinceFont[i].Width;

                        int nHeight1 = provinceFont[i].Height;

                        int ccc0 = 0, ccc1 = 0;

                        lv = 0;//两个图片匹配不相同的地方

                        for (int y = 0; y < nHeight; ++y)

                        {

                            for (int x = 0; x < nWidth; ++x)

                            {


                                if ((p[0] - p1[0]) != 0)

                                {

                                    provinceMatch[i]++;

                                    //Console.WriteLine(ccc0++);

                                }


                                //if (p[0] == 255)

                                //{ ccc0++; }

                                //if (p[1] == 255)

                                //{ ccc1++; }

                                p1 += 3;

                                p += 3;


                            }

                            p1 += nOffset;

                            p += nOffset;

                        }

                        //Console.WriteLine(provinceDigitalString[i] + "不相同的像素数值" + provinceMatch[i]);

                        //lv = lv + Math.Abs(ccc0 - ccc1);

                        matchIndex = this.minNumber(provinceMatch);

                        digitalFont[0] = provinceDigitalString[matchIndex].Substring(0,1);//文件的名字和图片信息匹配,所以得到的文件名就是图片上的文字


                        provinceFont[i].UnlockBits(bmData1);


                    }

                    z_Bitmaptwo[0].UnlockBits(bmData);

                }




                if (z_Bitmaptwo[1] != null && z_Bitmaptwo[2] != null && z_Bitmaptwo[3] != null && z_Bitmaptwo[4] != null && z_Bitmaptwo[5] != null && z_Bitmaptwo[6] != null)

                {

                    for (int j = 1; j < 7; j++)

                    {

                        BitmapData bmData = z_Bitmaptwo[j].LockBits(new Rectangle(0, 0, z_Bitmaptwo[j].Width, z_Bitmaptwo[j].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                        int stride = bmData.Stride;

                        System.IntPtr Scan = bmData.Scan0;

                        // byte* p = (byte*)(void*)Scan;

                        int nOffset = stride - z_Bitmaptwo[j].Width * 3;

                        int nWidth = z_Bitmaptwo[j].Width;

                        int nHeight = z_Bitmaptwo[j].Height;

                        int lv, lc = 0;

                        //Console.WriteLine("======================================" + j);

                        for (int i = 0; i < charBmpCount; i++)

                        {

                            charMatch[i] = 0;

                        }

                        for (int i = 0; i < charBmpCount; i++)

                        {

                            byte* p = (byte*)(void*)Scan;

                            BitmapData bmData1 = charFont[i].LockBits(new Rectangle(0, 0, charFont[i].Width, charFont[i].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                            int stride1 = bmData1.Stride;

                            System.IntPtr Scan1 = bmData1.Scan0;

                            byte* p1 = (byte*)(void*)Scan1;

                            int nOffset1 = stride1 - charFont[i].Width * 3;

                            int nWidth1 = charFont[i].Width;

                            int nHeight1 = charFont[i].Height;

                            int ccc0 = 0, ccc1 = 0;

                            lv = 0;

                            for (int y = 0; y < nHeight; ++y)

                            {

                                for (int x = 0; x < nWidth; ++x)

                                {


                                    if ((p[0] - p1[0]) != 0)

                                    {

                                        charMatch[i]++;

                                        // Console.WriteLine(ccc0++);

                                    }

                                    lv++;

                                    p1 += 3;

                                    p += 3;

                                }

                                p1 += nOffset;

                                p += nOffset;

                            }

                           // Console.WriteLine("图像尺寸" + lv);

                            Console.WriteLine(charDigitalString[i] + "数字中不相同的像素数值" + charMatch[i]);

                            matchIndex = this.minNumber(charMatch);

                            digitalFont[j] = charDigitalString[matchIndex].Substring(0, 1);//截取文件名的第一个字符就行了


                            charFont[i].UnlockBits(bmData1);


                        }


                        z_Bitmaptwo[j].UnlockBits(bmData);

                    }

                }